package io.xuan.modules.app.service.impl;


import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.xuan.common.utils.RedisUtils;
import io.xuan.modules.app.dao.UserDao;
import io.xuan.modules.admin.entity.AppUserEntity;
import io.xuan.modules.app.service.UserService;
import io.xuan.modules.app.utils.JwtUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service("userService")
public class UserServiceImpl extends ServiceImpl<UserDao, AppUserEntity> implements UserService {

    @Autowired
    private UserDao appUserDao;

    @Autowired
    private RedisUtils redisUtils;

    @Autowired
    private JwtUtils jwtUtils;

    public List<String> login(String userID, String password) {
        List<AppUserEntity> loginInfo = appUserDao.LoginInfo(userID);
        List<String> res = new ArrayList<>();
        if (loginInfo.size() == 1) {
            AppUserEntity user = loginInfo.get(0);
            if (user.getPassword().equals(password)) {
                // 登录成功，返回 token
                String token;
                String userId = String.valueOf(user.getUid());
                res.add("succeed");
                res.add(userId);
                res.add(String.valueOf(user.getType()));
                if (!redisUtils.contains(userId)) {
                    token = jwtUtils.generateToken(user.getUid());
                    res.add(token);
                    redisUtils.set(userId, token);
                } else {
                    token = redisUtils.get(userId);
                    res.add(token);
                }
            } else {
                // 密码错误，返回错误信息
                res.add("密码错误");
            }
        } else {
            // 用户不存在或者存在多个相同用户名的用户
            res.add("用户不存在或存在多个相同用户名的用户");
        }
        return res;
    }

    public boolean verifyToken(String Uid, String token) {
        // 验证 Token 是否存在于 Redis 中
        return redisUtils.existsValue(Uid, token);
    }

}
